﻿#include<iostream>
using namespace std;
int main() {
	short* a;
	cout << sizeof(a) << endl;

	float* aa;
	cout << sizeof(a) << endl;
	//指针的大小跟操作系统相关与变量类型无关，32位操作系统的指针大小为4字节，64位操作系统的指针大小为8字节

	unsigned ua{ 2342 };
	float* ptr{  };

	ptr = (float*)&ua;

	cout << ua << endl;
	cout << *ptr << endl;
	//本来不同类型编译器不能成功转换，但是指针本质是内存地址，都是8字节，所以能强制转换，打印结果分别按照变量和指针类型打印

	int b{ 123 };
	int* p{ &b };
	long long* up{ (long long*)&p };

	cout << *p << endl;//123
	cout << *up << endl;//672561887092
	//结果不同是因为数据原本是int 4字节，但是因为long long是8字节,需要向下继续读取，把别的内存地址的内容一起读取了

	int* tr{ &b };
	*tr = -1;
	char* r{ (char*)tr };
	*r = 'A';
	cout << b << endl;//-191
	//char是1字节，数据原本是int 4字节，上面操作修改了第一个字节，使得数据出现变化
}
